/*
 * CommunicationPrimerCinta.h
 *
 *  Created on: 18/11/2013
 *      Author: gonzalo
 */

#ifndef COMMUNICATIONPRIMERCINTA_H_
#define COMMUNICATIONPRIMERCINTA_H_

#include "../middleware/MiddlewareCommon.h"
#include "../common/Random.h"
#include "../application/AdminKeys.h"

namespace middleware {

class CommunicationPrimerCinta {
public:
	CommunicationPrimerCinta(char key);
	static void create(char key);
	static void destroy(char key);
	Producto obtenerProducto();
	void moverCinta();
	void lockCinta();
	void unlockCinta();
	bool primerEspacioVacio();
	bool ultimoEspacioVacio();
	bool cintaVacia();
	void ponerProducto(Producto prod);
	int cantidadProductosEnCinta();
	char getKey();
	void mostrarCinta();
	virtual ~CommunicationPrimerCinta();
	static const std::string CINTA_SHMEM_PATH;
	static const char CINTA_SHMEM_KEY_IZQ;
	static const char CINTA_SHMEM_KEY_DER;
private:
	char key;
	ipc::SharedMemoryInterface<CintaProductos> shMemCinta;
	static void inicializar(ipc::SharedMemoryInterface<CintaProductos> shMem);
};

} /* namespace middleware */
#endif /* COMMUNICATIONPRIMERCINTA_H_ */
